#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sql.h>
#include <dataStore.h>
#include <errmessage.h>
#include <sys/time.h>
#include <time.h>
#include <stringFun.h>
#include <sys/types.h>
#include <sys/socket.h>

/*
*	函数功能：		向数据库中插入一条数据
*	函数参数	：	1、nodeList节点指针
*				2、数据地址
*				3、数据长度
*	函数返回值：是否成功
*		  成功：0
*		  失败：<0
*/
int storeDataToSQL(PT_nodeList me, void *data, int dataLenth)
{
	int ret;
	struct storeDataType *ptr;
	char query[QUERYBUFFSIZE]={0};

	if(dataLenth < sizeof(*ptr) || me==NULL || data==NULL)
	{
		syslog(LOG_ERR,"storeDataToSQL paramas error");
		err_message(me->client_fd, PARAMAS_ERR);
		return -1;
	}

	//数据格式转换
	ptr = (struct storeDataType *)data;
	//生成sql语句
	snprintf(query,QUERYBUFFSIZE,"insert into netrelay values(%ld,\"%s\",%d,%d,%d,%d)",\
			time(NULL), me->client_id, ptr->relay1, ptr->relay2, ptr->relay3, ptr->relay4);
	//插入数据
	ret = sql_insert(sqlpool[me->pos], query);
	if(ret <0)
	{
		syslog(LOG_ERR,"storeDataToSQL insert error");
		err_message(me->client_fd, QUER_ERR);
		return -2;
	}

	return 0;
}

/*
*	函数功能：		从数据库中查询指定ID、指定条数的数据
*	函数参数	：	1、nodeList节点指针
*				2、数据地址
*				3、数据长度
*	函数返回值：是否成功
*		  成功：0
*		  失败：<0
*/
int queryDataFromSQL(PT_nodeList me, void *data, int dataLenth)
{
	struct queryDataType *ptr;
	char query[QUERYBUFFSIZE]={0};
	int  sendLenth;
	time_t currentTime;
	char timeStr[20];
	char *p;
	MYSQL_RES *res;
	MYSQL_ROW row;

	if(dataLenth < sizeof(*ptr) || me==NULL || data==NULL)
	{
		syslog(LOG_ERR,"queryDataFromSQL paramas error");
		err_message(me->client_fd, PARAMAS_ERR);
		return -1;
	}

	//数据格式转换
	ptr = (struct queryDataType *)data;
	//生成sql语句
	snprintf(query,QUERYBUFFSIZE,"select * from netrelay where id=\"%s\" order by time desc limit 0,%d",ptr->queryId, ptr->queryCount);
	//查询数据库
	res = sql_search(sqlpool[me->pos], query);
	if(res == NULL)
	{
		syslog(LOG_ERR,"queryDataFromSQL search error");
		err_message(me->client_fd, QUER_ERR);
		return -2;
	}
	
	//返回查询结果
	while((row = mysql_fetch_row(res)) !=NULL)
	{
		memset(query,0,QUERYBUFFSIZE);
		currentTime = strtol((char*)row[0],&p,10);	
		time2string(currentTime, timeStr);

		sendLenth = snprintf(query,QUERYBUFFSIZE,"time:%s mechine_id:%s relay1:%s relay2:%s relay3:%s relay4:%s",
							timeStr,row[1],row[2],row[3],row[4],row[5]);	
		send(me->client_fd, query, sendLenth, 0);
	}

	//释放查询结果
	mysql_free_result(res);

	return 0;
}


